package cn.iocoder.yudao.module.crossborder.order.controller.admin.ordershipment.vo;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

@Schema(description = "管理后台 - 跨境电商订单发货分页 Request VO")
@Data
public class OrderShipmentPageReqVO extends PageParam {

    @Schema(description = "发货单号")
    private String shipmentNo;

    @Schema(description = "订单编号", example = "11630")
    private Long orderId;

    @Schema(description = "订单号")
    private String orderNo;

    @Schema(description = "发货仓库编号", example = "11748")
    private Long warehouseId;

    @Schema(description = "发货仓库名称", example = "张三")
    private String warehouseName;

    @Schema(description = "发货类型（1正常发货 2部分发货 3补发 4换货发货）", example = "1")
    private Integer shipmentType;

    @Schema(description = "配送方式")
    private String shippingMethod;

    @Schema(description = "配送服务")
    private String shippingService;

    @Schema(description = "承运商代码")
    private String carrierCode;

    @Schema(description = "承运商名称", example = "芋艿")
    private String carrierName;

    @Schema(description = "运单号")
    private String trackingNo;

    @Schema(description = "跟踪链接", example = "https://www.iocoder.cn")
    private String trackingUrl;

    @Schema(description = "发货总数量")
    private BigDecimal totalQuantity;

    @Schema(description = "总重量（kg）")
    private BigDecimal totalWeight;

    @Schema(description = "总体积（立方米）")
    private BigDecimal totalVolume;

    @Schema(description = "包裹数量", example = "32345")
    private Integer packageCount;

    @Schema(description = "运费")
    private BigDecimal shippingCost;

    @Schema(description = "保险费")
    private BigDecimal insuranceCost;

    @Schema(description = "处理费")
    private BigDecimal handlingCost;

    @Schema(description = "总费用")
    private BigDecimal totalCost;

    @Schema(description = "货币代码")
    private String currencyCode;

    @Schema(description = "预计送达日期")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate[] estimatedDeliveryDate;

    @Schema(description = "预计运输天数")
    private Integer estimatedTransitDays;

    @Schema(description = "发货时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] shipTime;

    @Schema(description = "取件时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] pickupTime;

    @Schema(description = "运输中时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] inTransitTime;

    @Schema(description = "派送中时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] outForDeliveryTime;

    @Schema(description = "送达时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] deliveryTime;

    @Schema(description = "派送尝试次数")
    private Integer deliveryAttempts;

    @Schema(description = "配送状态（10待发货 20已发货 30运输中 40派送中 50已送达 60配送失败 70已退回）", example = "2")
    private Integer deliveryStatus;

    @Schema(description = "签收人")
    private String deliverySignature;

    @Schema(description = "配送备注")
    private String deliveryNotes;

    @Schema(description = "海关申报信息JSON")
    private String customsDeclaration;

    @Schema(description = "清关状态（0未申报 1申报中 2已清关 3清关失败）", example = "1")
    private Integer customsStatus;

    @Schema(description = "清关跟踪号")
    private String customsTrackingNo;

    @Schema(description = "是否投保")
    private Boolean isInsured;

    @Schema(description = "保险金额")
    private BigDecimal insuranceAmount;

    @Schema(description = "是否需要签收")
    private Boolean isSignatureRequired;

    @Schema(description = "特殊说明")
    private String specialInstructions;

    @Schema(description = "装箱单URL", example = "https://www.iocoder.cn")
    private String packingSlipUrl;

    @Schema(description = "运单标签URL", example = "https://www.iocoder.cn")
    private String shippingLabelUrl;

    @Schema(description = "发票URL", example = "https://www.iocoder.cn")
    private String invoiceUrl;

    @Schema(description = "备注", example = "你猜")
    private String remark;

    @Schema(description = "创建时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime[] createTime;

}